Eu tenho mexido com JSON há algum tempo, apenas empurrando-o como texto e não fez mal a ninguém (que eu saiba), mas gostaria de começar a fazer as coisas corretamente. Tenho visto tantos supostos "padrões" para o tipo de conteúdo JSON: application / json application / x-javascript text / javascript text / x-javascript text / x-json Mas qual é a correta ou a melhor? Percebi que existem problemas de segurança e suporte do navegador que variam entre eles. Eu sei que há uma pergunta semelhante, que tipo de MIME se JSON estiver sendo retornado por uma API REST ?, mas gostaria de uma resposta um pouco mais direcionada.
2020-12-07 21:17:31
1 2 Próximo Para texto JSON: application / json O tipo de mídia MIME para texto JSON é application / json. A codificação padrão é UTF-8. (Fonte: RFC 4627). Para JSONP (JavaScript executável) com retorno de chamada: aplicativo / javascript Aqui estão algumas postagens de blog que foram mencionadas nos comentários relevantes: Por que você não deve usar text / html para JSON Às vezes, o Internet Explorer apresenta problemas com application / json Uma lista bastante completa de tipos MIME e como usá-los A lista oficial de tipos de mímica na IANA da resposta de @gnrfan abaixo | A IANA registrou o tipo MIME oficial para JSON como application / json. Quando questionado sobre por que não text / json, Crockford parece ter dito que JSON não é realmente JavaScript nem texto e também IANA tinha mais probabilidade de distribuir application / * do que text / *. Mais recursos: Tipos de mídia Pedido de Comentários 4627 bluesmoon: JSON tem um tipo | Para JSON: Tipo de conteúdo: application / json Para JSON-P: Content-Type: application / javascript | Obviamente, o tipo de mídia MIME correto para JSON é application / json, mas é necessário perceber que tipo de dados é esperado em seu aplicativo. Por exemplo, eu uso Ext GWT e a resposta do servidor deve ir como text / html, mas contém dados JSON. Lado do cliente, ouvinte de formulário Ext GWT uploadForm.getForm (). addListener (new FormListenerAdapter () { @Sobrepor public void onActionFailed (Form form, int httpStatus, String responseText) { MessageBox.alert ("Erro"); } @Sobrepor public void onActionComplete (Form form, int httpStatus, String responseText) { MessageBox.alert ("Sucesso"); } }); No caso de usar o tipo de resposta application / json, o navegador sugere que eu salve o arquivo. Fragmento de código-fonte do lado do servidor usando Spring MVC retornar novo AbstractUrlBasedView () { @SuppressWarnings ("desmarcado") @Sobrepor protected void renderMergedOutputModel (modelo de mapa, solicitação HttpServletRequest, Resposta HttpServletResponse) lança exceção { response.setContentType ("text / html"); response.getWriter (). write (json); } }; | JSON: A resposta são dados gerados dinamicamente, de acordo com os parâmetros de consulta passados na URL. Exemplo: {"Nome": "Foo", "Id": 1234, "Classificação": 7} Tipo de conteúdo: application / json JSON-P: JSON com preenchimento. A resposta são dados JSON, com uma chamada de função envolvida por eles. Exemplo: functionCall ({"Nome": "Foo", "Id": 1234, "Classificação": 7}); Content-Type: application / javascript | Se você estiver usando Ubuntu ou Debian e servir arquivos .json por meio do Apache, convém veicular os arquivos com o tipo de conteúdo correto. Estou fazendo isso principalmente porque quero usar a extensão JSONView do Firefox O módulo mod_mime do Apache ajudará a fazer isso facilmente. No entanto, com o Ubuntu você precisa editar o arquivo /etc/mime.types e adicionar a linha application / json json Em seguida, reinicie o Apache: sudo service apache2 restart | Se você estiver chamando ASP.NET Web Services do lado do cliente, deverá usar application / json para que funcione. Acredito que seja o mesmo para os frameworks jQuery e Ext. | O tipo de conteúdo certo para JSON é application / json A MENOS que você esteja usando JSONP, também conhecido como JSON com Padding, que na verdade é JavaScript e, portanto, o tipo de conteúdo certo seria application / javascript. | Não há dúvida de que application / json é o melhor tipo MIME para uma resposta JSON. Mas eu tive alguma experiência onde tive que usar application / x-javascript por causa de alguns problemas de compressão. Meu ambiente de hospedagem é hospedagem compartilhada com GoDaddy. Eles não me permitem alterar as configurações do servidor. Eu adicionei o seguinte código ao meu arquivo web.config para compactar as respostas.Ao usar isso, as páginas .aspx foram compactadas com g-zip, mas as respostas JSON não. Eu adicionei nas seções de tipos estáticos e dinâmicos. Mas isso não comprime as respostas JSON. Depois disso, removi esse tipo recém-adicionado e adicionei em ambas as seções de tipos estáticos e dinâmicos, e mudou o tipo de resposta em .ashx (manipulador assíncrono) para application / x-javascript E agora descobri que minhas respostas JSON foram compactadas com g-zip. Então, eu pessoalmente recomendo usar application / x-javascript apenas se você deseja compactar suas respostas JSON em um ambiente de hospedagem compartilhado. Porque na hospedagem compartilhada, eles não permitem que você altere o IISconfigurações. | Apenas quando utilizar application / json como o MIME tipo I têm a seguinte (em Novembro de 2011 com as versões mais recentes do Chrome, Firefox com Firebug): Não há mais avisos do Chrome quando o JSON é carregado do servidor. O Firebug adicionará uma guia à resposta mostrando os dados JSON formatado. Se o tipo MIME for diferente, ele apenas aparecerá como 'Conteúdo da resposta'. | Nem tudo funciona para o tipo de conteúdo application / json. Se você estiver usando o envio de formulário Ext JS para fazer upload do arquivo, esteja ciente de que a resposta do servidor é analisada pelo navegador para criar o documento para o